package com.usian.jyzx.product.controller;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.github.pagehelper.PageInfo;
import com.usian.jyzx.model.dto.product.ProductSkuDto;
import com.usian.jyzx.model.entity.product.Category;
import com.usian.jyzx.model.entity.product.Product;
import com.usian.jyzx.model.entity.product.ProductDetails;
import com.usian.jyzx.model.entity.product.ProductSku;
import com.usian.jyzx.model.vo.common.Result;
import com.usian.jyzx.model.vo.common.ResultCodeEnum;
import com.usian.jyzx.model.vo.h5.IndexVo;
import com.usian.jyzx.model.vo.h5.ProductItemVo;
import com.usian.jyzx.product.service.CategoryService;
import com.usian.jyzx.product.service.ProductDetailsService;
import com.usian.jyzx.product.service.ProductService;
import com.usian.jyzx.product.service.ProductSkuService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @TODO:
 * @Author:baimu
 * @Date:2024 07 04 14 14
 **/

@RestController
@RequestMapping("/api/product")

public class ProductController {

   @Autowired
   CategoryService categoryService;

   @Autowired
   ProductSkuService productSkuService;

   @RequestMapping("/index")
   public Result index(){

      //商品一级分类：查询category表，获取parent_id="0"的数据列表
      List<Category> categoryList = categoryService.findCategoryByParentId(0L);

     //畅销商品列表：查询product_sku表，根据sale_num字段排序，取前20条数据列表
      List<ProductSku> saleSkuList = productSkuService.findSaleSkuList();

      IndexVo indexVo = new IndexVo();
      indexVo.setCategoryList(categoryList);

      indexVo.setProductSkuList(saleSkuList);

      return Result.build(indexVo, ResultCodeEnum.SUCCESS);

   }


   @RequestMapping("/category/findCategoryTree")
   public Result findThreeCategory(){
      List<Category> threeCategory = categoryService.findThreeCategory(0L);
      return Result.build(threeCategory, ResultCodeEnum.SUCCESS);
   }



   @GetMapping("/{pageNo}/{pageSize}")
   public  Result producyList(@PathVariable("pageNo") Integer pageNo,
                              @PathVariable("pageSize")Integer pageSize,
                              ProductSkuDto productSkuDto){


      PageInfo<ProductSku> productSkuPageInfo = productSkuService.productList(pageNo, pageSize, productSkuDto);
      return Result.build(productSkuPageInfo, ResultCodeEnum.SUCCESS);
   }


   @Autowired
   ProductService productService;

   @Autowired
   ProductDetailsService productDetailsService;

   /**
    *
    * @param skuId
    * @return
    */

   /**
    * 根据SKU ID获取商品详情。
    * @param skuId 商品SKU的ID。
    * @return 包含商品详情和SKU信息的结果对象。
    */
   @GetMapping("/item/{skuId}")
   public Result item(@PathVariable("skuId") Long skuId) {
       ProductItemVo productItemVo = new ProductItemVo();

       // 根据SKU ID查询SKU信息
       ProductSku productSkuById = productSkuService.findProductSkuById(skuId);
       productItemVo.setProductSku(productSkuById);

       // 通过SKU获取关联的产品ID
       Long productId = productSkuById.getProductId();
       // 根据产品ID查询产品信息
       Product product = productService.findProductById(productId);
       productItemVo.setProduct(product);

       // 根据产品ID查询产品详情
       ProductDetails productDetailsById = productDetailsService.findProductDetailsById(productId);
       // 获取产品详情中的图片URL字符串
       String imageUrls = productDetailsById.getImageUrls();
       // 将图片URL字符串分割为数组，并转换为列表形式
       String[] imageUrlArr = imageUrls.split(",");
       productItemVo.setDetailsImageUrlList(Arrays.asList(imageUrlArr));

       // 获取产品的规格值字符串，并转换为JSON数组
       String specValue = product.getSpecValue();
       JSONArray specValueJsonArray = JSON.parseArray(specValue);
       productItemVo.setSpecValueList(specValueJsonArray);

       // 查询该产品下的所有SKU信息
       List<ProductSku> productSkuList = productSkuService.findProductByProductId(productId);
       // 构建SKU规格值与SKU ID的映射关系
       Map<String, Integer> skuSpecValueMap = new HashMap<>();
       productSkuList.forEach(i -> {
           String skuSpec = i.getSkuSpec();
           Integer id = i.getId();
           skuSpecValueMap.put(skuSpec, id);
       });
       productItemVo.setSkuSpecValueMap(skuSpecValueMap);

       // 返回包含商品详情和SKU信息的结果对象
       return Result.build(productItemVo, ResultCodeEnum.SUCCESS);
   }


   @GetMapping("/findProductSkuById/{id}")
   public ProductSku findProductSkuById(@PathVariable("id") Long id){
      return productSkuService.findProductSkuById(id);
   }


}
